<template>
  <!-- 新增文章 -->
  <el-dialog
    :title="showTitle"
    :visible="showDialog"
    width="60%"
    @close="handleClose"
    top="8vh"
  >
    <el-form
      :model="article"
      :rules="articleFrom"
      label-width="80px"
      ref="articleFrom"
    >
      <el-form-item prop="title" label="文章标题">
        <el-input v-model="article.title" placeholder="根据文章标签"></el-input>
      </el-form-item>
      <el-form-item label="文章内容" prop="articleBody">
        <!-- 富文本编辑器 -->
        <!-- 失去焦点时手动校验该字段 (当前 articleBody 属性值) -->
        <quill-editor
          @blur="$refs.articleFrom.validateField('articleBody')"
          v-model="article.articleBody"
        />
      </el-form-item>
      <el-form-item prop="videoURL" label="视频地址">
        <el-input v-model="article.videoURL"></el-input>
      </el-form-item>
    </el-form>
    <template v-slot:footer>
      <el-button @click="handleClose">取消</el-button>
      <el-button type="primary" @click="submitClick">确定</el-button>
    </template>
  </el-dialog>
</template>

<script>
// 新增文章请求 /修改 /获取文章详情.编辑数据回显
import { reqAdd, reqUpdate, reqDetail } from '@/api/hmmm/articles'
export default {
  props: {
    // 接收弹出框状态
    showDialog: {
      type: Boolean,
      required: true
    },
    // 表单编辑回显
    editForm: {
      type: Object,
      require: true
    }
  },
  data () {
    return {
      // 新增文章表单
      article: {
        title: '',
        articleBody: '',
        videoURL: ''
      },
      // 校验规则
      articleFrom: {
        title: [
          { required: true, message: '请输入文章标题', trigger: 'blur' },
          {
            min: 1,
            max: 30,
            message: '文章标题的长度为1-30个字符',
            trigger: 'blur'
          }
        ],
        articleBody: [
          // <!--上方定义失去焦点时手动校验该字段 (当前 articleBody 属性值) -->
          { required: true, message: '请输入文章内容', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    // 关闭
    handleClose () {
      this.$emit('update:showDialog', false) // 关闭弹窗
      this.article = {
        title: '',
        articleBody: '',
        videoURL: ''
      }
      this.$refs.articleFrom.resetFields() // 重置校验表单
    },
    // 添加文章
    async submitClick () {
      // 兜底校验
      this.$refs.articleFrom.validate(async (valid) => {
        if (!valid) return
        // 根据id有无 判断文章是修改还是新增
        if (this.article.id) {
          await reqUpdate(this.article) // 有id修改文章
          this.$message.success('修改文章成功')
        } else {
          await reqAdd(this.article) // 无id新增文章
          this.$message.success('新增文章成功')
        }
        this.handleClose() // 关闭弹窗
        this.$emit('getArticleList') // 通知父组件重新获取文章列表
      })
    },
    // 用于给父组件调用
    async Detail () {
      // 获取文章详
      const { data: res } = await reqDetail(this.editForm)
      // 情数据回显
      this.article = res
    }
  },
  computed: {
    showTitle () {
      return this.article.id ? '编辑文章' : '新增文章'
    }
  }
}
</script>

<style scoped lang="scss">
::v-deep .ql-editor {
  // 样式穿透
  min-height: 180px !important;
}
::v-deep .el-dialog__footer {
  text-align: right;
}
</style>
